import os,time,datetime
import pandas as pd
# //////////////////////////////////////////def __init__(self,bianma):///////////////////////////////////////////////////class DataCheck: start
class DataCheck:
    bianma=""
    flag_day=""
    mk=""
    tmpTag=""
    # 初始化。。。
    # //////////////////////////////////////////def __init__(self,bianma):////////////////////////////////////////////////__init__
    def __init__(self,bianma,tmpTag="临时数据"):
        # 设置编码格式
        self.bianma =bianma
        self.tmpTag=tmpTag
        info="===============================def __init__(self):编码格式"+bianma+"==============================="
        printinfo(info,"RED")
    # 循环获取DF数据
    # path_file 导入文件路径
    # exp_file 导出文件路径
    # period 周期标注
    #//////////////////////////////////////////get_data//////////////////////////////////////////////////////////////////get_data
    def get_data(self,path_file,exp_file,period):

        pathDir = os.listdir(path_file)
        count = len(pathDir)

        print("\n原始文件路径：( " + path_file, ")",'文件数量',count)
        print("导出文件路径：( " + exp_file, ")")
        start = time.perf_counter()
        c = 0
        scale = count
        i = 1
        for file in pathDir:
            path = path_file + file#完整文件路径
            # print("#完整文件路径【",path,"】")

            # 调用get_df 函数
            df = self.get_df(path_file+file,period)

            pathFile = path[-13:]
            mk = pathFile[:2]
            code = pathFile[3:][0:6]
            tscode = mk + code
            expfile = exp_file + tscode + "_" + period + ".CSV"
            # expfile = exp_file + tscode + "_" + period + ".CSV"
            expInfo=path+"--->\t"+expfile
            # printinfo(expInfo,"MAGENTA")
            # ===========================导出成csv文件===========================
            # 判断是否有数据
            if df.shape[0]>1 :
                df.to_csv( expfile, index=False)
            # ===========================导出成csv文件===========================

            # 进度条 [1]	17 % ▋▋▋▋▋▋▋▋......................................... 0.83s 	SZ#000651.txt
            a = (i / scale) * 100
            b = '.' * 50
            c = '▋' * (int((i * 50) / scale))
            b = '.' * (49 - int((i * 50) / scale))
            dur = time.perf_counter()  # //每次获取当前时间
            print("\r[{}]\033[1;33m\t{:^3.0f}% {}{} {:.2f}s".format(i, a, c, b, dur), '\t' + file, "=>", tscode + "_" + period + ".CSV",
                  "SIZE:", count, end=' ')

            # if i==1:
            #     break
            i+=1


    # //////////////////////////////////////////get_df///////////////////////////////////////////////////////////////////get_df
    def get_df(self,pathFile,flag_day):
        # print("\t get_df(",pathFile,self.bianma,flag_day,")")
        # ===========================判断文件头部===========================
        if flag_day=="DAY":
            titleName = ['trade_date', 'open', 'high', 'low', 'close', 'vol', 'amount']
        else:
            titleName = ['trade_date', 'trade_times', 'open', 'high', 'low', 'close', 'vol', 'amount']
        df = pd.read_table(pathFile, header=1, encoding=self.bianma, names=titleName, converters={'trade_times': str})
        # df = pd.read_table(pathFile, header=1, encoding="gbk")
        # ===========================判断文件头部===========================

        if flag_day != "DAY":
            # 清理1300的数据
            df.loc[df['trade_times'] == '1300', 'trade_times'] = 1130

        # 删除最后一行SZ#399007.txt 5254    数据来源:通达信   NaN   NaN   NaN    NaN          NaN           NaN  1  1
        df.drop([len(df) - 1], inplace=True)
        # 添加TS_CODE列/////////////////////////////////////////////
        tscode=self.get_tscode(pathFile)
        df.insert(0, 'ts_code', tscode, allow_duplicates=False)

        pdweek=pd.to_datetime(df.trade_date,format='%Y-%m-%d %H:%M:%S.%f')
        # print(pdweek.dt.dayofweek+1)
        if flag_day == "DAY":
            df.insert(2, 'trade_times', pdweek.dt.dayofweek+1, allow_duplicates=False)
        pd.set_option('display.expand_frame_repr', False)

        printinfo(pathFile)
        #**************************************************************************************************************
        # print(self.read_fileone(pathFile))
        # read_fileone = self.read_fileone(pathFile)
        list_firstline = self.read_file_one(pathFile).split()
        #**************************************************************************************************************
        # print(read_fileone[1])
        df =self.set_col(df,list_firstline)
        print(df.tail(5))
        return df

    # //////////////////////////////////////////get_df///////////////////////////////////////////////////////////////////get_tscode
    # 转换路径为 XXXXXX.SZ 代码 E:\stcokData\20220116\stock_5MIN_qfq\SH#600000.txt
    def get_tscode(self,pathFile):
        pathFile = pathFile[-13:]
        mk = pathFile[:2]
        code = pathFile[3:][0:6]
        tscode =  code+"."+mk
        self.mk=mk
        #返回格式 XXXXXX.SZ
        return tscode

    def get_week_day(date):
      week_day_dict = {
        0 : '星期一',
        1 : '星期二',
        2 : '星期三',
        3 : '星期四',
        4 : '星期五',
        5 : '星期六',
        6 : '星期天',
      }
      day = date.weekday()
      return week_day_dict[day]

    # ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////read_fileone
    # 读取文件的一行数据
    def read_file_one(self,filename):
        # 打开文件
        fo = open(filename, "r")
        fileFirstLine = fo.readline()
        fo.close()
        return fileFirstLine
    def set_col(self,df,list_firstline):

        # 插入ts_code列
        # self.df.insert(0, '完整代码', self.tscode, allow_duplicates=False)
        df.insert(df.shape[1], 'symbol', list_firstline[0], allow_duplicates=False)
        df.insert(df.shape[1], 'name', list_firstline[1], allow_duplicates=False)
        df.insert(df.shape[1], 'k_type', list_firstline[2], allow_duplicates=False)
        df.insert(df.shape[1], 'adj', list_firstline[3], allow_duplicates=False)
        df.insert(df.shape[1], 'market', self.mk, allow_duplicates=False)
        currentDate = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        df.insert(df.shape[1], 'tag', self.tmpTag, allow_duplicates=False)
        df.insert(df.shape[1], 'insertDate', currentDate, allow_duplicates=False)
        return df
# //////////////////////////////////////////def __init__(self,bianma):///////////////////////////////////////////////////class DataCheck: end


#///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import colorama
from colorama import init, Fore, Back, Style
init(autoreset=True)
#////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////printinfo
def printinfo(text,colr="GREEN"):
    if colr=="CYAN":
        print(Fore.CYAN +Style.BRIGHT+ text)
    if colr=="RED":
        print(Fore.RED +Style.BRIGHT+ text)
    if colr=="BLUE":
        print(Fore.RED +Style.BRIGHT+ text)
    if colr=="GREEN":
        print(Fore.GREEN +Style.BRIGHT+ text)
    if colr=="WHITE":
        print(Fore.WHITE +Style.BRIGHT+ text)
    if colr=="YELLOW":
        print(Fore.YELLOW +Style.BRIGHT+ text)
    if colr=="MAGENTA":
        print(Fore.MAGENTA +Style.BRIGHT+ text)
#/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////__name__ == '__main__':
if __name__ == '__main__':
    os.system('cls')
    printinfo("程序开始运行。。。")
    # 统计程序开始时间
    starttime = datetime.datetime.now()


    cd =DataCheck("gbk")
    cd.get_data("E:\\stcokData\\20220116\\stock_5MIN_qfq\\","E:\\stcokData\\20220116\\export\\stock_all_qfq\\" ,"5MIN")


    df=cd.get_data("E:\\stcokData\\20220116\\stock_DAY_qfq\\", "E:\\stcokData\\20220116\\export\\stock_all_qfq\\","DAY")
    print(df)
    # END 程序结束

    # 统计程序开结束时间
    endtime = datetime.datetime.now()
    printinfo("\n程序运行时间：" + str(endtime - starttime))
    print('=============================\t程序运行结束\t=============================')
